﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Classes
{
    public class Cliente : Persona, IEquatable<Cliente>
	{
		private string _fechaNac;
		private string _pais;
		private IList<Vehiculo> _listVehiculo;
		private Cuota _cuota;        


		#region Get / Set
		public string Pais
		{
			get { return _pais; }
			set { _pais = value; }
		}

        public IList<Vehiculo> ListVehiculo
        {
            get { return _listVehiculo; }
           
        }	

		public string FechaNacimiento
		{
			get { return _fechaNac; }
			set {_fechaNac = value; }
		}

        public Cuota Cuota
        {
            get { return _cuota; }
            set { _cuota = value; }
        }	
		#endregion

		
		/// <summary
		/// No es condicion de crear una instancia de cliente el que tenga un vehiculo asociado
		/// </summary>
		public Cliente(string nombre, string apellido, string dni, string domicilio, string telefono,string fechaNac, string pais)
			: base(nombre, apellido, dni, domicilio, telefono)
		{
			this._listVehiculo = new List<Vehiculo>();
			this._pais = pais;
            this._fechaNac = fechaNac;
		}

		public void addVehiculo(Vehiculo v)
		{
			this._listVehiculo.Add(v);
		}

		public Consulta GenerarConsulta()
		{
			return null;
		}

        //public Scoring CambiarScoring(Cliente c)
        //{
        //    return null;
        //}

        //calculo de la cuota inicial solo para la carga de la DB
        public void addCuotaInicial()
        {
            int monto=0;
            // recorro los DBVehiculos ya cargados si tiene y le voy descontando el scoring;
            for (int i = 0; i < this._listVehiculo.Count(); i++)
            {
                monto = 180 - this._listVehiculo.ElementAt(i).Scoring.Descuento;
                
            }

            if (monto == 0)
                this.Cuota = new Cuota(00, 01, DateTime.Parse("11-11-2011"),180);
            else
                this.Cuota = new Cuota(00, 01, DateTime.Parse("11-11-2011"),monto);
           
        }

        public Vehiculo getVehiculo(String patente)
        {
            foreach (Vehiculo v in this.ListVehiculo)
            {
				if (v.Patente == patente)
				{
					return v;
				}
            }
            return null;
        }


		public Cuota CalcularCuota()
		{
			return null;
		}

        public bool Equals(Cliente other)
        {
            return this.Dni.Equals(other.Dni);
        }

        public void ImprimirDatos()
        {
            Console.WriteLine("");
            Console.WriteLine("APELLIDO: " + this.Apellido);
            Console.WriteLine("NOMBRE: " + this.Nombre);
            Console.WriteLine("DNI: " + this.Dni);
            Console.WriteLine("DOMICILIO: " + this.Domicilio);
            Console.WriteLine("NACIONALIDAD: " + this.Pais);
            Console.WriteLine("TELEFONO: " + this.Telefono);
            Console.WriteLine("FECHA DE NACIMIENTO: " + this.FechaNacimiento);
            Console.WriteLine("");
            Console.WriteLine("");
        }


        public void imprimirListaVehiculos()
        {
            Console.Clear();
            Console.WriteLine("Listado de Vehiculos:");
            for (int i = 0; i < this._listVehiculo.Count(); i++)
            {
                this._listVehiculo.ElementAt(i).ImprimirDatos();
                if (this._listVehiculo.Count() == i + 1)
                    Console.WriteLine("Ha Llegado al último Vehiculo !!!");
                else
                    Console.WriteLine("Presione enter para ver el próximo");
                Console.ReadKey();
            }
            return;
        }
    }
}
